<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
  
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

  
  <link href="../css/style.css" rel="stylesheet" type="text/css">

</head>
<body>
<h1>4.2. Первая программа</h1>
<p class="article">
Курс обучения любому языку программирования принято начинать с написания программы «Hello, world!». Однако мы этого делать не будем. Потому что «Hello, world!» на ассемблере придется долго объяснять и трудно понять сходу. 
Поэтому мы напишем совсем простую программу. Будем писать только COM-программы под DOS. Они проще, чем EXE, а подробно разбирать тонкости программирования под DOS не является 
целью данного учебного курса.
Для того, чтобы написать программу, надо запустить fasmw.exe. Откроется окошко, в которое можно писать код:
</p>
<pre class="code">
use16               ;Генерировать 16-битный код
org 100h            ;Программа начинается с адреса 100h
 
    mov ax,255      ;Поместить 255 в регистр AX
    inc ax          ;Увеличить содержимое AX на 1
    nop             ;Эта команда ничего не делает
    mov bx,ax       ;Поместить в BX содержимое AX
 
    mov ax,4C00h    ;\
    int 21h         ;/ Завершение программы
</pre>
<p class="article">
Первая строка «use16» сообщает FASM’у, что нужно генерировать 16-битный код. Нам нужен именно такой для нашей первой программы. Точка с запятой &ndash; это символ комментария. Все что идет после «;» до конца строки игнорируется компилятором. Там можно писать все что угодно.
</p>
<p class="article">
Вторая строка «org 100h» объясняет FASM’у, что следующие команды и данные будут располагаться в памяти, начиная с адреса 100h. Дело в том, что при загрузке нашей программы в память, DOS размещает в первых 256 байтах (с адресов 0000h — 00FFh) свои служебные данные. Нам эти данные изменять нежелательно.
</p>
<p class="article">
Далее идут непосредственно команды! Программа на ассемблере состоит из команд процессора. Каждая команда обозначается мнемоникой (символическим именем). Например «mov», «inc», «nop» и т.д. После мнемоники могут идти операнды. Они отделяются одним или несколькими пробелами (или табуляцией).
</p>
<p class="article">
Команды бывают без операндов, с одним или несколькими операндами. Если операндов больше одного, то они отделяются друг от друга запятыми.
Отступы не обязательны, но желательны — с ними код гораздо легче читать. Пустые строки игнорируются. Регистр символов значения не имеет. Можно писать большими буквами, или маленькими, или в перемешку.
</p>
<p class="article">
Четвертая строка определяет команду «поместить число 255 в регистр AX». «mov» — это мнемоника команды (от английского «MOVe»). AX — первый операнд — приёмник. 255 — второй операнд — источник. Первый операнд является регистром. Второй операнд — константа 255.
</p>
<p class="article">
Пятая строка. Тут команда «inc» с одним операндом. Она заставит процессор выполнить инкремент, то есть увеличение на единицу. Единственный операнд — это регистр AX, содержимое которого и будет увеличено на 1.
</p>
<p class="article">
Шестая строка. Команда «nop» — без операндов. Эта команда ничего не делает.
</p>
<p class="article">
Седьмая строка. Снова команда «mov», но на этот раз оба операнда являются регистрами. Команда скопирует в BX содержимое AX.
</p>
<p class="article">
Две последние строки — это стандартное завершение процесса в DOS. Так мы будем завершать все наши программы. Команда «mov» должна быть вам понятна, а про команду «int» я ещё расскажу, это отдельная тема.
</p>
<p class="article">
Чтобы откомпилировать программу надо выбрать меню Run->Compile. FASM предложит сохранить файл, если вы этого ещё не сделали, а затем скомпилирует. То есть переведет текст, набранный нами, в машинный код и сделает его программой. Файл с расширением .asm — это исходный код или исходник, обычный текстовый файл.
В каталоге с asm-файлом появился файл .com — это и есть наша прога!
</p>
<div class="noteclassic">
Файл с расширением .com &ndash; исполняемый файл (command) ОС DOS. Файл вормата 
.exe &ndash; более поздний формат исполняемого (executable) файла DOS и Windows. 
</div>
</body>
</html>
